// 用户相关数据维护和 管理模块
import { setToken, getToken, removeToken } from '@/utils/auth.js'
import { login, getUserInfo, getUserDetailById } from '@/api/user'
import { resetRouter } from '@/router'

export default {
  namespaced: true,
  // 存和定义用户数据
  state: {
    // token: '',
    token: getToken() || '',
    // 登录人信息
    userInfo: {}
  },

  // 修改state中的数据
  mutations: {
    // 存token
    updateToken (state, token) {
      state.token = token
      setToken(token)
    },
    // 删除token
    delToken (state) {
      state.token = ''
      removeToken()
    },
    // 存储用户信息
    updateUserInfo (state, userInfo) {
      state.userInfo = userInfo
    },
    // 删除用户信息
    delUserInfo (state) {
      state.userInfo = {}
    }
  },

  // 获取后台数据(异步)
  actions: {
    // 退出登录
    logoutAction ({ commit }) {
      // 1 如果有退出接口 =>调用
      // 2清除本地登录储存的数据
      // 3 重置路由 =>resetRouter
      // 4 重置菜单的vuex数据

      commit('delToken')
      commit('delUserInfo')
      resetRouter()
      // {root:true }开启父模块权限=>可以调用兄弟模块mucations方法
      commit('menu/setMenuList', [], { root: true })
    },
    // 调用登录接口
    async loginAction ({ commit }, payload) {
      // 调接口
      const token = await login(payload)
      commit('updateToken', token)
    },
    // 获取当前登录人信息
    // 什么时候调用登录人信息=>可以在permisson.js中前置门卫守卫
    async userInfoAction (ctx) {
      // 用户的基本信息
      const userInfo = await getUserInfo()
      // 获取用户头像
      const avator = await getUserDetailById(userInfo.userId)
      console.log({ userInfo, avator })
      // 合并两个对象{ ...userInfo, ...avator }
      ctx.commit('updateUserInfo', { ...userInfo, ...avator })
      return userInfo.roles
    }
  }
}
